/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
    Text, LineColumn, InputLine, Input, Select, BlobInputList, TextArea, SuffixInput, InputDatalist,
} from "customize-easy-ui-component";
import {
    InspectRecordLayout, InternalItemProps, useItemInputControl,
} from "../../common/base";
import {useMeasureInpFilter} from "../../common/hooks";
import {EditStorageContext} from "../../StorageContext";
import {usePrefixDataEdit} from "../../hook/usePrefixData";

/**@property name : 附录显示名称, 和页面逻辑开关代码上需保持一致的。
 * @property ha : Hash路由标签
 * @property na : 表示不在【结论附录】当中出现的吗，但都出现在目录中的。不在附录表也没有安排目录表这页的也行。
 * @property ml : 该分项在【目录】中的文本显示题目。 可设置尾部统一加上"报告"
 * @property do : 默认有做的分项报告
 * 报告中实际打印顺序看代码：
 * 原平台testlogcfg.ses的 "contlist" :[ {"contname":}, ]列出全部分项。  而"mainpage":[ ]扣除"addpage":[]后的是固定的必须展示。 nosavepage无关的；
 * */
export const VsProjects默认=[
    {name:'压力容器定期检验结论',ha:'Conclusion',na:true, do:true},
    //压力容器定期检验报告附页: ？可能不生成的
    {name:'压力容器资料审查',ha:'MaterialReview', do:true},
    {name:'宏观检验',ha:'Macroscopic',do:true},
    {name:'壁厚测定',ha:'rp_thickmVs_'},
    {name:'耐压强度校核',ha:'??', ml:'壁厚校核报告'},
    {name:'射线检测',ha:'rp_radio_'},
    {name:'超声检测',ha:'rp_sonic_'},
    {name:'衍射时差法（TOFD）超声检测',ha:'rp_tofd_'},
    {name:'磁粉检测',ha:'rp_magnetic_'},
    {name:'渗透检测',ha:'rp_permeation_'},
    {name:'声发射检测',ha:'??'},
    {name:'光谱分析',ha:'rp_spectrVs_',ml:'材料成分分析（光谱分析）报告'},
    {name:'硬度检测',ha:'rp_hardness_'},
    {name:'金相分析',ha:'??'},
    {name:'安全附件检验',ha:'SafetyAccesor'},
    {name:'耐压试验',ha:'rp_pressure_'},
    {name:'气密性试验报告',ha:'rp_gasproof_'},
    {name:'氨检漏试验',ha:'??'},
    {name:'氦、卤素检漏试验',ha:'??'},
    {name:'附加检验', na:true, ha:'AdditionalTest'},
];

interface DeviceSurveyPrfProps  extends InternalItemProps{
    //更通用考虑：允许动态配置
    config?: ( (verId:string,orc:any)=>any[] )  | any[];
}
/**特别的 设备概要编辑器: 配置上和原来DeviceSurvey组件有差别。配套使用 usePrefixDataReviewTbl 来展示报告的；
 * 两者不兼容的config配置。
 * */
export const DeviceSurveyPrf=
    React.forwardRef((
        { children, show ,alone=true,verId,redId,nestMd,label,config}:DeviceSurveyPrfProps,  ref
    ) => {
        const {storage, setStorage} =React.useContext(EditStorageContext) as any;
        const {inp, setInp} = useItemInputControl({ref});
        const newconfig = React.useMemo(() => {
            return (typeof config ==='function'? config(verId!,storage) : config);
        }, [config,verId,storage]);
        //【重大】毛病啊config: 动态的就导致：死循环依赖热 【最后】接了一个useMemo包裹呢 @还不能用inp替换storage来做的。
        const [renderEditline, itemA概要] = usePrefixDataEdit({
            inp, setInp, config: newconfig! });
        const [getInpFilter] = useMeasureInpFilter(null, itemA概要,);
        return <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} redId={redId}
                                    nestMd={nestMd} alone={alone} label={label!}>
            <Text variant="h5">{label}：</Text>
            设备概况相关，除在台账业务信息中可修改外还需修改的部分:
            {renderEditline}
            { children }
        </InspectRecordLayout>;
    });

export const 工作介质选=['空气','内筒/夹套：食品/蒸汽'];
interface Props  extends InternalItemProps{
    //对应“新下检日”字段的实际标签描述？
    nextjycl?: string;       //默认=“定期检验”
}
//多出一个  '工作介质' :给编辑器显示默认值的。
export const itemA下结论=['问题及处','安全评定','检验结论','结论压力','结论温度','结论介质','结论其它','检验日期','检验日期1','新下检日','结论说明' ];
//工作压力','工作温度','工作介质： 这3个是台账就存在的。
const itemA下结论m=itemA下结论.concat(['工作压力','工作温度','工作介质']);
//年度检查：
export const ConclusionVsWDj=
    React.forwardRef((
        { children, show ,alone=true,redId,nestMd,label,nextjycl='定期检验'}:Props,  ref
    ) => {
        const defvcbFunc = React.useCallback((par: any) => {
            const {结论压力,结论温度,结论介质 }=par||{};
            if(!结论压力)   par.结论压力=par?.工作压力;
            if(!结论温度)   par.结论温度=par?.工作温度;
            if(!结论介质)   par.结论介质=par?.工作介质;
            return  par;
        }, []);
        const [getInpFilter]=useMeasureInpFilter(null,itemA下结论m,defvcbFunc);
        const {inp, setInp} = useItemInputControl({ ref });
        return <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} redId={redId}
                                    nestMd={nestMd} alone={alone} label={label!}>
            <Text variant="h5">{label}：</Text>
            问题及其处理：
            <TextArea value={inp?.问题及处 || ''} rows={7}
                      onChange={e => setInp({...inp, 问题及处: e.currentTarget.value || undefined})}/>
            <hr/>
            <Text variant="h5">检验结论-检查结论{'>>'}</Text>
            <LineColumn>
                <InputLine  label='安全状况等级评定为' >
                    <Select inputSize="md" css={{minWidth:'140px',fontSize:'1.3rem',padding:'0 1rem'}}
                            value={ inp?.安全评定  ||''} onChange={e => setInp({ ...inp, 安全评定: e.currentTarget.value||undefined}) }>
                        <option></option>
                        <option>1级</option>
                        <option>2级</option>
                        <option>3级</option>
                        <option>4级</option>
                        <option>5级</option>
                    </Select>
                </InputLine>
                <InputLine  label='检查结论' >
                    <Select inputSize="md" css={{minWidth:'140px',fontSize:'1.3rem',padding:'0 1rem'}}
                            value={ inp?.检验结论  ||''} onChange={e => setInp({ ...inp, 检验结论: e.currentTarget.value||undefined}) }>
                        <option></option>
                        <option>符合要求</option>
                        <option>基本符合要求</option>
                        <option>不符合要求</option>
                    </Select>
                </InputLine>
            </LineColumn>
            允许（监控）使用参数：
            <LineColumn>
                <InputLine  label='压力' >
                    <SuffixInput  value={inp?.结论压力 ||''}
                                  onChange={e=>setInp({ ...inp, 结论压力: e.currentTarget.value||undefined})}>MPa</SuffixInput>
                </InputLine>
                <InputLine  label='温度' >
                    <SuffixInput  value={inp?.结论温度 ||''}
                                  onChange={e=>setInp({ ...inp, 结论温度: e.currentTarget.value||undefined})}>℃</SuffixInput>
                </InputLine>
                <InputLine  label='介质'>
                    <InputDatalist value={inp?.结论介质 ||''}  datalist={工作介质选}
                                   onListChange={v => setInp({ ...inp, 结论介质: v||undefined})} />
                </InputLine>
                <InputLine  label='其它'>
                    <BlobInputList value={inp?.结论其它 ||''} rows={1}
                                   onListChange={v => setInp({ ...inp, 结论其它: v || undefined}) } />
                </InputLine>
                <InputLine label='设置检验日期'>
                    <Input value={inp?.检验日期 || ''} type='date'
                           onChange={e => setInp({...inp, 检验日期: e.currentTarget.value})}/>
                </InputLine>
                <InputLine  label='检验起始日期' >
                    <Input  value={inp?.检验日期1 ||''}  type='date'
                            onChange={e => setInp({ ...inp, 检验日期1: e.currentTarget.value}) } />
                </InputLine>
                <InputLine  label={`下次${nextjycl}日期`}>
                    <Input  value={inp?.新下检日 ||''}  type='date'
                            onChange={e => setInp({ ...inp, 新下检日: e.currentTarget.value}) } />
                </InputLine>
            </LineColumn>
            结论-说明:
            <TextArea  value={inp?.结论说明 ||''} rows={6}
                       onChange={e => setInp({ ...inp, 结论说明: e.currentTarget.value||undefined}) } />
        </InspectRecordLayout>;
    });
